home *** CD-ROM | disk | FTP | other *** search
- /* fillbuf.c - fill file buffer.
- K & R page 168.
- Entered - G. R. Mansfield. 84/06/08.
- Ver 1.1-4728.
- */
-
- #include <stdio.h>
-
- int _fillbuf(fp) /* allocate and fill input buffer */
- register FILE *fp;
- {
- static char c, *p;
- char *malloc();
- int l;
-
- if ((fp->_flag & _READ) == 0 || (fp->_flag & (_EOF | _ERR)) != 0)
- return(EOF);
- if (fp->_base == NULL) /* find buffer space */
- if (fp->_flag & _UNBUF) /* unbuffered */
- fp->_base = &c;
- else if ((fp->_base = malloc(BUFSIZE, 1)) == NULL) {
- wcs("no buffer space for file\n");
- exit(2);
- }
-
- fp->_ptr = fp->_base;
- l = fp->_flag & _UNBUF ? 1 : BUFSIZE;
- fp->_cnt = read(fp->_fd, fp->_ptr, l);
- if (--fp->_cnt < 0) {
- if (fp->_cnt == -1)
- fp->_flag |= _EOF;
- else
- fp->_flag |= _ERR;
- fp->_cnt = 0;
- return(EOF);
- }
-
- return(*fp->_ptr++);
- }
-